home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
simula
/
books
/
books.lha
/
kirkerud
/
promptools.sim
< prev
next >
Wrap
Text File
|
1993-08-16
|
6KB
|
173 lines
class promptools;
begin
% ************************************************************
% * *
% * Denne klassen inneholder verkt|y (prosedyrer) som *
% * kan brukes til } lese inn enkle verdier (tall, tegn, *
% * sannhetsverdier) som brukeren blir bedt om } skrive. *
% * *
% * F|lgende prosedyrer er deklarert: *
% * *
% * integer procedure be_om_int(prompt); text prompt; *
% * <Skriver prompt'et, leser inn heltall *
% * tastet av brukeren. Innlesingen er robust: *
% * Dersom brukeren taster noe som ikke er heltall, *
% * skrives en feilmelding, og brukeren gis en ny *
% * sjanse>; *
% * real procedure be_om_real(prompt); text prompt; *
% * <Skriver prompt'et, leser inn reelt tall *
% * tastet av brukeren. Robust.>; *
% * character procedure be_om_char(prompt); text prompt; *
% * <Skriver prompt'et, leser inn et tegn *
% * tastet av brukeren.>; *
% * Boolean procedure be_om_bool(prompt); text prompt; *
% * <Skriver prompt'et, leser inn et tegn *
% * tastet av brukeren. Funksjon-verdien er *
% * false dersom brukeren taster 'n' eller 'N', *
% * true ellers>; *
% * text procedure be_om_text(prompt); text prompt; *
% * <Skriver prompt'et, leser inn en linje tastet *
% * av brukeren. Funksjonsverdien er resultatet *
% * av } 'strippe' denne linjen>; *
% * *
% * Desuten fins de samme prosedyrene med engelske navn *
% * og feilutskrifter: *
% * *
% * integer procedure ask_for_int(prompt); text prompt; *
% * real procedure ask_for_real(prompt); text prompt; *
% * character procedure ask_for_char(prompt); text prompt; *
% * Boolean procedure ask_for_bool(prompt); text prompt; *
% * text procedure ask_for_text(prompt); text prompt; *
% * *
% * Laget til bruk i undervisningen i IN105 *
% * Programmerer: Bj|rn Kirkerud *
% * *
% ************************************************************
% Prosedyrer for } lese heltall:
integer procedure be_om_int(prompt); text prompt;
begin character c; integer tegn;
ask(prompt);
c := inchar; while c = ' ' do c := inchar;
tegn := if c = '-' then -1 else +1;
if c = '-' or c = '+' then c := inchar;
if not digit(c)
then begin
message("Ulovlig tegn i heltall: '", c, "'. Pr|v p} nytt!");
be_om_int := be_om_int(prompt);
end
else begin
sysin.setpos(sysin.pos - 1);
be_om_int := tegn*inint;
end;
end;
integer procedure ask_for_int(prompt); text prompt;
begin character c; integer tegn;
ask(prompt);
c := inchar; while c = ' ' do c := inchar;
tegn := if c = '-' then -1 else +1;
if c = '-' or c = '+' then c := inchar;
if not digit(c)
then begin
message("Illegal character in integer: '", c, "'. Try once more!");
ask_for_int := ask_for_int(prompt);
end
else begin
sysin.setpos(sysin.pos - 1);
ask_for_int := tegn*inint;
end;
end;
% Prosedyrer for } lese reelle tall:
real procedure be_om_real(prompt); text prompt;
begin character c; integer tegn;
ask(prompt);
c := inchar; while c = ' ' do c := inchar;
tegn := if c = '-' then -1 else +1;
if c = '-' or c = '+' then c := inchar;
if not (digit(c) or c = '.')
then begin
message("Ulovlig tegn i tall: '", c, "'. Pr|v p} nytt!");
be_om_real := be_om_real(prompt);
end
else begin
sysin.setpos(sysin.pos - 1);
be_om_real := tegn*inreal;
end;
end;
real procedure ask_for_real(prompt); text prompt;
begin character c; integer tegn;
ask(prompt);
c := inchar; while c = ' ' do c := inchar;
tegn := if c = '-' then -1 else +1;
if c = '-' or c = '+' then c := inchar;
if not (digit(c) or c = '.')
then begin
message("Illegal character in number: '", c, "'. Try once more!");
ask_for_real := ask_for_real(prompt);
end
else begin
sysin.setpos(sysin.pos - 1);
ask_for_real := tegn*inreal;
end;
end;
% Prosedyrer for } lese enkelt-tegn:
character procedure be_om_char(prompt); text prompt;
begin character c;
ask(prompt);
c := inchar; while c = ' ' and sysin.more do c := inchar;
be_om_char := c;
end;
character procedure ask_for_char(prompt); text prompt;
ask_for_char := be_om_char(prompt);
% Prosedyrer for } lese sannhetsverdier:
Boolean procedure be_om_bool(prompt); text prompt;
begin character c;
ask(prompt);
c := inchar; while c = ' ' and sysin.more do c := inchar;
be_om_bool := not(c = 'n' or c = 'N');
end;
Boolean procedure ask_for_bool(prompt); text prompt;
ask_for_bool := be_om_bool(prompt);
% Prosedyrer for } lese tekst:
text procedure be_om_text(prompt); text prompt;
begin
ask(prompt);
be_om_text :- intext(80).strip;
end;
text procedure ask_for_text(prompt); text prompt;
ask_for_text :- be_om_text(prompt);
% To hjelpeprosedyrer:
procedure ask(prompt); text prompt;
begin
outtext(prompt); breakoutimage; inimage;
end;
procedure message(t1, c, t2); text t1, t2; character c;
begin outtext(t1); outchar(c); outtext(t2); outimage end;
end promptools;